/**
 *  Document   : IHotelAndRoomManagement
 *  Created on : 17 juil. 2008, 15:50:00
 *  Author     : Rivo
 */
package gla.centralhotel.business;

import gla.centralhotel.exception.HotelRoomNumberException;
import gla.centralhotel.exception.IllegalPeriodException;
import gla.centralhotel.exception.IllegalPriceException;
import gla.centralhotel.exception.SubscriptionManagementException;
import gla.centralhotel.exception.TooLongTextException;
import gla.centralhotel.model.Hotel;
import gla.centralhotel.model.Manager;
import gla.centralhotel.model.Price;
import gla.centralhotel.model.Room;
import gla.centralhotel.model.RoomType;
import java.util.Date;
import javax.ejb.Local;

@Local
public interface IHotelAndRoomManagement {

    /**
     * Enregistre l'hotel contenant une refManager
     * @param hotel
     * @return
     */
    public Hotel saveHotelSubscription(Hotel hotel) throws SubscriptionManagementException, TooLongTextException;
    
    /**
     * Enregistre l'hotel avec une refManager en params
     * @param hotel
     * @param manager
     * @return
     */
    public Hotel saveHotelSubscription(Hotel hotel, Manager manager) throws SubscriptionManagementException, TooLongTextException;
    
    /**
     * Le parametre "room" doit etre initialiser par les params "hotel" et type
     * Une chambre : id + numéro de chambre
     * @param hotel
     * @param room
     * @param type
     * @return
     */
    Room addRoomToHotel(Hotel hotel, Room room, RoomType type) throws HotelRoomNumberException;

    /**
     * Le parametre "room" contient tous les ref qu'il faut
     * refHotel et refRoomType
     * Une chambre : id + numéro de chambre
     * @param room
     * @return
     */
    public Room addRoomToHotel(Room room) throws HotelRoomNumberException;

    /**
     * Cree le prix de la chambre avec une refRoom primitif
     * Période et le prix en float
     * @param refRoom
     * @param start
     * @param end
     * @param price
     * @return
     */
    public Price setPriceToRoom(Integer refRoom, Date start, Date end, Float price) throws IllegalPriceException, IllegalPeriodException;

    /**
     * Cree le prix de la chambre "room" avec en params la période et le prix en float
     * @param room
     * @param start
     * @param end
     * @param price
     * @return
     */
    public Price setPriceToRoom(Room room, Date start, Date end, Float price) throws IllegalPriceException, IllegalPeriodException;
    
    public void deletePrice(Price price);
    
    /**
     * retourne la liste des hotel par ville
     * @param zipcodeId
     * @return
     */
    public java.util.ArrayList<gla.centralhotel.model.Hotel> getHotelListByZipcode(java.lang.Integer zipcodeId);

        /**
     * retourne la liste de tous les hotel
     * @return
     */
    public java.util.ArrayList<gla.centralhotel.model.Hotel> getHotelList();
    
    
}
